﻿using FluentNHibernate.Mapping;

namespace PatentApp.Models
{
    public class PracownikMap : ClassMap<Pracownik>
    {
        public PracownikMap()
        {
            Id(x => x.PracownikId);
            Map(x => x.Imie).Length(50);
            Map(x => x.Nazwisko).Length(50);
            Map(x => x.Tytul).Length(500);
            Map(x => x.Wydzial).Length(50);
            HasManyToMany<Produkt>(x => x.Produkty).Cascade.All().Table("PracownikProdukt");
            Table("Pracownik");
        }
    }

    public class SlowoKluczoweMap : ClassMap<SlowoKluczowe>
    {
        public SlowoKluczoweMap()
        {
            Id(x => x.SlowoKluczoweId);
            Map(x => x.Slowo).Length(150);
            Table("SlowoKluczowe");
        }
    }

    public class AccessMap : ClassMap<Access>
    {
        public AccessMap()
        {
            Id(x => x.AccessId);
            Map(x => x.Login).Length(50);
            Map(x => x.Haslo).Length(50);
            References(x => x.Pracownik).Cascade.All().Column("PracownikFk");
            Table("Access");
        }
    }

    public class KategoriaMap : ClassMap<Kategoria>
    {
        public KategoriaMap()
        {
            Id(x => x.KategoriaId);
            Map(x => x.Nazwa).Length(100);
            HasMany<Produkt>(x => x.Produkty).KeyColumn("KategoriaFk");
            Table("Kategoria");
        }
    }

    public class ProduktMap : ClassMap<Produkt>
    {
        public ProduktMap()
        {
            Id(x => x.ProduktId);
            Map(x => x.NrOgolny);
            Map(x => x.NrRoczny);
            Map(x => x.NrZgloszenia).Length(25);
            Map(x => x.NrPatentu).Length(25);
            Map(x => x.Tytul).Length(250);
            Map(x => x.SlowoKluczowe).Length(100);
            Map(x => x.WlascicielPraw).Length(100);
            Map(x => x.Platnosc);
            Map(x => x.DataZglTworcy);
            Map(x => x.DataZgloszenia).Nullable();
            Map(x => x.DataOgloZglo).Nullable();
            Map(x => x.DataOgloPat).Nullable();
            References(x => x.Kategoria).Cascade.All().Column("KategoriaFk").Not.LazyLoad();
            HasManyToMany<Pracownik>(x => x.Pracownicy).Table("PracownikProdukt").Cascade.All().Not.LazyLoad();
            Table("Produkt");
        }
    }
}
